# -*- coding: utf-8 -*-
import pygame, sys, os
from pygame.locals import *
from player import *
from cenario import *


clock = pygame.time.Clock()

class Single_Player:
	##fase inicial##
	def start(self,idioma_selecionado,som,screen):
		screen = screen
		##fase inicial##
		fase = Cenario('ponte',som,1,idioma_selecionado)
		player = Player(84,126)
		lista_de_players = [player]
		rodando = True
		pause = False
		tempo_pausado = datetime.now()
		def mostrar_ranking(idioma_selecionado,screen):
			screen = screen
			fonte1  = pygame.font.Font('fontes' + os.sep + 'Edmunds.ttf',25)
			fonte2  = pygame.font.Font('fontes' + os.sep + 'Edmunds.ttf',45)	
			rodando = True
			imagem_interface = pygame.image.load('imagens' + os.sep + 'interfaces' + os.sep + 'ranking.png')
			if idioma_selecionado == 'portugues':
				placar = u'Classificação:'
			elif idioma_selecionado == 'ingles':
				placar = 'Ranking:'
			elif idioma_selecionado == 'frances':
				placar = 'Classement:'
			arq = open('ranking.txt','r')
			conteudo = arq.read()
			conteudo_limpo = conteudo.replace('\n',' ')
			lista_conteudo = conteudo_limpo.split()
			arq.close()
			lista_final = []
			for linha in lista_conteudo:
					linha = linha.split('|')
					lista_final.append((int(linha[0]),str(linha[1]).replace('_',' ')))
					
			while rodando:
				for event in pygame.event.get():
					if event.type == KEYDOWN and event.key == K_RETURN:
						rodando = False
				screen.blit(imagem_interface,(0,0))
				dx_center_background = imagem_interface.get_rect().centerx
				dy_center_background = 210
				tamanho_palavra = fonte2.render(placar,True,(255,255,255)).get_rect().size
				coordenada = (dx_center_background - tamanho_palavra[0]/2,dy_center_background - tamanho_palavra[1]/2)
				screen.blit(fonte2.render(placar,True,(255,255,255)),coordenada)
				y = 260
				i = 1
				for linha in reversed(sorted(lista_final)):
					score = linha[0]
					nome = linha[1]
					screen.blit(fonte1.render(str(i)+' - '+nome,True,(255,255,255)),(320,y))
					screen.blit(fonte1.render("%010d" % int(score),True,(255,255,255)),(485,y))
					y+= 35
					i+= 1
				pygame.display.update()
		def adc_score(score,jogador):
			nome_arq = 'ranking.txt'
			arq = open(nome_arq,'a')
			arq.write(str(score)+'|'+jogador+'\n')
			arq.close()
		def verificar_score_ranking(score_jogador):
			nome_arq = 'ranking.txt'
			arq = open(nome_arq,'r')
			conteudo = arq.read()
			conteudo_limpo = conteudo.replace('\n',' ')
			lista_conteudo = conteudo_limpo.split()
			arq.close()
			if len(lista_conteudo) < 5:
				return True
			else:
				lista_final = []
				for tupla in lista_conteudo:
					tupla = tupla.split('|')
					lista_final.append(tupla)
				lista_final = sorted(lista_final)
				menor_score = int(lista_final[0][0])
				if menor_score < score_jogador:
					lista_final.pop(0)
					arq = open(nome_arq,'w')
					for tupla in lista_final:
						arq.write(str(tupla[0])+'|'+tupla[1]+'\n')
					arq.close()
					return True
				else:
					return False
		def pegar_nome(screen,idioma_selecionado):
			fonte1  = pygame.font.Font('fontes' + os.sep + 'Edmunds.ttf',30)
			rodando,escreve = True,True
			nome = ""
			imagem_interface = pygame.image.load('imagens' + os.sep + 'interfaces' + os.sep + 'escuro2.png')
			screen.blit(imagem_interface,(0,0))
			pygame.display.update()
			if idioma_selecionado == 'portugues':
				perg_nome = 'Digite seu nome:'
			elif idioma_selecionado == 'ingles':
				perg_nome = 'Enter your name:'
			elif idioma_selecionado == 'frances':
				perg_nome = 'Entrez vostre nom:'
			while rodando:
				for event in pygame.event.get():
					if event.type == QUIT:
						rodando = False
					if event.type == KEYDOWN and event.key == K_ESCAPE:
						rodando = False
				while escreve:
					screen.blit(imagem_interface,(0,0))
					fonte2  = pygame.font.Font('fontes' + os.sep + 'Edmunds.ttf',45)	
					dx_center_background = imagem_interface.get_rect().centerx
					dy_center_background = 230
					tamanho_palavra = fonte2.render(perg_nome,True,(255,255,255)).get_rect().size
					coordenada = (dx_center_background - tamanho_palavra[0]/2,dy_center_background - tamanho_palavra[1]/2)
					screen.blit(fonte2.render(perg_nome,True,(255,255,255)),coordenada)
					blit_nome = fonte1.render(("%s"%nome),True,(255,255,255))
					dx_center_background = imagem_interface.get_rect().centerx
					dy_center_background = 300
					tamanho_palavra = blit_nome.get_rect().size
					coordenada = (dx_center_background - tamanho_palavra[0]/2,dy_center_background - tamanho_palavra[1]/2)
					screen.blit(blit_nome,coordenada)
					pygame.display.update()
					for event in pygame.event.get():
						if event.type == KEYDOWN:
							if event.key == K_BACKSPACE:
								nome = nome[:-1]
							elif event.key == K_KP_ENTER or event.key == K_RETURN:
								escreve = False
								rodando = False
								return nome.replace(' ','_')
							else:
								try:
									if not  len(nome) >= 10:
										nome += str(event.unicode)
								except: pass
		while rodando:
			if not pause:
				clock.tick(80)
				screen.blit(fase.background,(0,0))
				if fase.comeco_de_fase:
					if (datetime.now() - fase.tempo_inicial).seconds >= 2:
						screen.blit(fase.imagem_interface[0],(0,0))
						screen.blit(fase.imagem_interface[0],(0,0))
					if (datetime.now() - fase.tempo_inicial).seconds <= 1:
						screen.blit(fase.imagem_interface[0],(0,0))
						screen.blit(fase.imagem_interface[0],(0,0))
					if (datetime.now() - fase.tempo_inicial).seconds >= 3:
						dx_center_background = fase.background.get_rect().centerx
						dy_center_background = fase.background.get_rect().centery		
						fonte  = pygame.font.Font('fontes' + os.sep + 'Edmunds.ttf',50)
						tamanho_palavra = fonte.render(fase.fase_nome,True,(255,255,255)).get_rect().size
						coordenada = (dx_center_background - tamanho_palavra[0]/2,dy_center_background - tamanho_palavra[1]/2)
						screen.blit(fonte.render(fase.fase_nome,True,(255,255,255)),coordenada)
					if (datetime.now() - fase.tempo_inicial).seconds == 5:
						fase.comeco_de_fase = False
						if fase.som_disponivel and not fase.comeco_de_fase:
							pygame.mixer.music.load('sounds' + os.sep + fase.fase + '.mp3')
							pygame.mixer.music.play(-1)
				else:
					key = pygame.key.get_pressed()

					for event in pygame.event.get():
						if event.type == QUIT:
							pygame.quit()
							sys.exit()
						if event.type == KEYUP:
							if key[pygame.K_SPACE] and player.status == 'VIVO' and len(fase.lista_de_inimigos) <> 0:
								player.soltar_boma(fase)
							if key[pygame.K_p]:
								pause = not pause
								tempo_pausado = datetime.now()
					if player.status == 'VIVO' and len(fase.lista_de_inimigos) <> 0:
						if key[pygame.K_a]:
							player.move(-player.velocidade, 0)
							fase.colisao_de_movimento(-player.velocidade, 0, player)
						if key[pygame.K_d]:
							player.move(player.velocidade, 0)
							fase.colisao_de_movimento(player.velocidade, 0, player)
						if key[pygame.K_w]:
							player.move(0, -player.velocidade)
							fase.colisao_de_movimento(0, -player.velocidade, player)
						if key[pygame.K_s]:
							player.move(0, player.velocidade)
							fase.colisao_de_movimento(0, player.velocidade, player)
					fase.desenha_itens(screen,lista_de_players)
					fase.colisao_estatica(player)
					if not fase.fase_concluida:
						screen.blit(player.player_imagem,(player.rect.x-4,player.rect.y-29))
					if player.vidas <= 0 or fase.tempo_da_fase == 0:
						fase.game_over(screen,idioma_selecionado)
						key = pygame.key.get_pressed()
						if key[pygame.K_RETURN]:
							mostrar_ranking(idioma_selecionado,screen)
							rodando = False
				if fase.fase_concluida == True:
					nome_fase = fase.proxima_fase(player)
					if nome_fase == 'fim':
						pygame.mixer.music.stop()
						fase.fim_do_jogo(screen,idioma_selecionado,player)
						if verificar_score_ranking(player.score):
							nome = str(pegar_nome(screen,idioma_selecionado))
							adc_score(player.score,nome)
							mostrar_ranking(idioma_selecionado,screen)
							rodando = False
						else:
							mostrar_ranking(idioma_selecionado,screen)
							rodando = False
					else:
						fase = Cenario(nome_fase,som)
				if pause:
					screen.blit(pygame.image.load('imagens' + os.sep + 'interfaces' + os.sep + 'escuro.png'),(0,0))
					if idioma_selecionado == 'portugues':
						palavra = 'Pausa'
					else:
						palavra = 'Pause'
					dx_center_background = fase.background.get_rect().centerx
					dy_center_background = fase.background.get_rect().centery		
					fonte  = pygame.font.Font('fontes' + os.sep + 'Edmunds.ttf',40)
					tamanho_palavra = fonte.render(palavra,True,(255,255,255)).get_rect().size
					coordenada = (dx_center_background - tamanho_palavra[0]/2,dy_center_background - tamanho_palavra[1]/2)
					screen.blit(fonte.render(palavra,True,(255,255,255)),coordenada)
				pygame.display.update()
			else:
				for bomba in fase.lista_de_bombas:
					if (tempo_pausado - datetime.now()).seconds >= 1:
						tempo_que_passou_antes_de_pausar = bomba.tempo_inicial - tempo_pausado
						bomba.tempo_inicial = datetime.now() - tempo_que_passou_antes_de_pausar
						tempo_pausado = datetime.now()
				key = pygame.key.get_pressed()
				for event in pygame.event.get():
					if key[pygame.K_p]:
						pause = not pause

